package com.cskaoyan.bean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * 容器中有组件实现了BeanPostProcessor接口，其他的所有的组件都会执行BeanPostProcessor的方法
 * 作用范围：除了它本身其他的所有组件
 * @author stone
 * @date 2022/03/21 15:12
 */
public class CommonBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println(beanName + "正在生命周期");
        if (bean instanceof LifeCycleBean) {
            LifeCycleBean bean2 = (LifeCycleBean) bean;
            bean2.setUsername("远志");
            return bean2;
        }
        //如果我传入的是LifecycleBean，我能不能给他替换成代理对象呢？
        //返回的时候能不能换成动态代理的对象呢？

        return bean;
    }

    //和before一摸一样，只有执行顺序不同
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("BeanPostProcessor的after方法：" + beanName);
        return null;
    }
}
